/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"D28762BE-83E4-4D00-83AF-8A822B695192",variableType:4}
 */
var fCentro = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"97EBDA8E-D577-41F5-9336-DD27D186B828"}
 */
var fCuentaDesde = null;

/**
 * @type {String}
 *
 * @properties={typeid:35,uuid:"70ED0092-0A70-4154-B69F-3B1B8B161F79"}
 */
var fCuentaHasta = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E497837C-86D7-4FB7-896A-21F9E0D7579E",variableType:4}
 */
var fDivision = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"12C95090-D18C-42C4-B27C-168D86EAC740",variableType:4}
 */
var fMoneda = 1;

/**
 * @properties={typeid:24,uuid:"F2AC79E1-1622-46C2-A42B-DC2CF0092137"}
 */
function imprimir()
{
	try{
		crearMayor('impresion')
	}
	catch (e){
		globals.DIALOGS.showWarningDialog("Aviso",'Error: '+ e,'OK')
	}
}

/**
 * @properties={typeid:24,uuid:"2191BCC4-A4FE-46C0-B21D-31F78041EB0E"}
 */
function pdf ()
{
	try{
		crearMayor('pdf')
	}
	catch (e){
		globals.DIALOGS.showWarningDialog("Aviso",'Ocurrio un error: '+e,'OK')
	}
}

/**
 * @param {String} tipo
 * @properties={typeid:24,uuid:"C6EB3257-A1A9-4F4F-BC15-9DC3B8972E73"}
 * @AllowToRunInFind
 */
function crearMayor(tipo)
{
	globals.gmoneda_consulta = fMoneda
	if (fCuentaDesde > fCuentaHasta)
	{
		globals.DIALOGS.showWarningDialog("Aviso",'Intervalo de cuentas mal ingresado - Verifique','OK')
		return 0
	}
	
/*	var $asientos = databaseManager.getFoundSet('contable','asiento')
	
	if ($asientos.find() == false) return 0
	
	var $fecha_desde = new Date()
	$fecha_desde.setFullYear(globals.gAnioDesde,globals.gMesDesde-1,1)
	var $fecha_hasta = new Date()
	$fecha_hasta.setFullYear(globals.gAnioHasta,globals.gMesHasta,0)
	
	$asientos.asiento_to_asiento_cab.fecha 		= '#'+utils.dateFormat($fecha_desde,'dd-MM-yyyy') + '...' + utils.dateFormat($fecha_hasta,'dd-MM-yyyy')+'|dd-MM-yyyy'
	if (fCuentaDesde == fCuentaHasta)
	{
		$asientos.aux_cuenta					= fCuentaDesde
	}
	else
		$asientos.aux_cuenta					= fCuentaDesde + "..." + fCuentaHasta
	
	if (fDivision != null) $asientos.division	= fDivision
	if (fCentro != null)   $asientos.centro		= fCentro
	
	$asientos.search()
	var $cant = databaseManager.getFoundSetCount($asientos)
	if ($cant == 0)	return 0

	//var $sort_order = 'aux_cuenta asc, columna asc'
	$asientos.sort('aux_cuenta asc, columna asc')
	*/
	
	var $sql = 'SELECT a.aux_cuenta,a.division,a.centro,a.leyenda,a.numero,a.importe_debe,a.importe_haber,a.columna, '+
				'0 AS "total_debe_pesos",0 AS "total_haber_pesos",a.cuentas_id, c.fecha, a.cuenta_impresion '+
				'FROM asiento "a" '+
				'JOIN asiento_cab "c" ON c.asiento_cab_id = a.asiento_cab_id '+
				'WHERE c.fecha BETWEEN ? AND ? AND a.aux_cuenta BETWEEN ? AND ? AND c.ejercicio_id = ? '
	var $fecha_desde = new Date()
	$fecha_desde.setFullYear(globals.gAnioDesde,globals.gMesDesde-1,1)
	var $fecha_hasta = new Date()
	$fecha_hasta.setFullYear(globals.gAnioHasta,globals.gMesHasta,0)
	/** @type {Array<Object>} */
	var $args = [$fecha_desde, $fecha_hasta, fCuentaDesde, fCuentaHasta, globals.gEjercicio]
				
	if (fDivision)
	{
		$sql += ' AND division = ?'
		$args.push(fDivision)
	}
	if (fCentro)
	{
		$sql += ' AND centro = ?'
		$args.push(fCentro)
	}
	$sql += 'ORDER BY a.aux_cuenta, c.fecha, a.numero;'

	var $asientos = databaseManager.getDataSetByQuery('contable',$sql,$args,-1)
	
	if ($asientos.getMaxRowIndex() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No se encontraron asientos con esas condiciones','OK')
		return 0
	}
	var $dSource = agregarTotales($asientos)

	var $params = {
		fecha_desde: application.getValueListDisplayValue('varios_mes_entero',globals.gMesDesde) + ' de '+ globals.gAnioDesde,
		fecha_hasta: application.getValueListDisplayValue('varios_mes_entero',globals.gMesHasta) + ' de '+ globals.gAnioHasta,
		userv: usuarios_to_uservs.razon_social
	}
	$dSource.sort(function sort(fila1, fila2){
		var o = 0;
		if (fila1[12] < fila2[12]) {
				o = -1;
		} else {
			if (fila1[12] == fila2[12])
			{
				if (fila1[11] < fila2[11])
					o = -1
				else
					if (fila1[11] == fila2[11])
					{
						if (fila1[7] < fila2[7])
							o = -1
					}
			}
			else
			{
				o = 1;
			}
		}
			
		return o;
	});
	//application.output('1: ' + $dSource.getAsText(';','\n','"',true))
	globals.metodoJasper(tipo,'contable/mayor.jasper','Mayor_',$dSource,$params)	
	
/*	var $frm = solutionModel.getForm('mayor_impresion_fs')
	
	$frm.dataSource = $dSource
	forms[$frm.name].controller.recreateUI()
	forms[$frm.name].controller.sort($sort_order)
	forms[$frm.name].elements.lbl_titulo.text = 'Libro Mayor - Desde el ' + forms.mayor_impresion_2.globals.gMesDesde + '/' + forms.mayor_impresion_2.globals.gAnioDesde + ' al  ' + forms.mayor_impresion_2.globals.gMesHasta + '/' + forms.mayor_impresion_2.globals.gAnioHasta + ' En '+ gmonedaconsulta_to_monedas.descripcion
	var hoy = new Date()
	forms[$frm.name].elements.lbl_fecha.text = '<html>Fecha de Emisión: <b>' + utils.dateFormat(hoy,'dd-MM-yyyy') + '_</b> Hora: <b>' + utils.dateFormat(hoy,'HH:mm:ss')+' </b> </html>' 
*/

	return 1
}

/**
 * 
 * @param {JSDataSet} $ds
 * 
 * @properties={typeid:24,uuid:"4A247B02-1218-4467-948D-FBA33AF5F34A"}
 */
function agregarTotales($ds)
{
//	var $cols 		= new Array('cuenta_impresion','division','centro','leyenda','numero','importe_debe','importe_haber','columna','total_debe_pesos','total_haber_pesos','cuentas_id','asiento_to_asiento_cab.fecha')
//	var $ds 		= $asientos// databaseManager.convertToDataSet( $asientos, $cols)
	
	$ds.addColumn('saldo')
	
	var $cta 		= $ds.getValue(1,1)
	var $c_ant		= $ds.getValue(1,1)
	var $cta_ant	= $cta.substr(0,7)
	var $scta_ant	= $cta.substr(7,4)
	var $cta_act	= $cta_ant
	var $scta_act	= $scta_ant
	var $scta_debe 	= 0
	var $scta_haber = 0
	var $cta_debe 	= 0
	var $cta_haber 	= 0
	var termino 	= 0
	
	var $fecha_ant 	= new Date(globals.gAnioDesde, globals.gMesDesde-1, 0,0,0,0)
	var $fecha_post = new Date(globals.gAnioHasta, globals.gMesHasta-1, 31,23,59,59)
	
	var i = 1
	var iPrimer = 1
	while (i <= $ds.getMaxRowIndex() && termino == 0)
	{
		while (i <= $ds.getMaxRowIndex() && $cta_ant == $cta_act && $scta_ant == $scta_act)
		{
			//NO HAY CORTE POR SUBCUENTA NI POR CUENTA, ENTONCES SIGO
			$scta_debe 	+= $ds.getValue(i,6) 
			$scta_haber += $ds.getValue(i,7)
			$cta_debe 	+= $ds.getValue(i,6) 
			$cta_haber 	+= $ds.getValue(i,7)
			
			var $fecha = utils.dateFormat($ds.getValue(i,12),'dd-MM-yyyy hh:mm:ss')
			$ds.setValue(i,12,utils.parseDate($fecha,'dd-MM-yyyy hh:mm:ss'))
			
			i++
			$cta 		= $ds.getValue(i,1)
			if ($cta != null)
			{
				if (i <= $ds.getMaxRowIndex())
				{
					$cta_act	= $cta.substr(0,7)
					$scta_act	= $cta.substr(7,4)	
				}
			}
		}
		//SALIO, HUBO CORTE POR CUENTA O SUBCUENTA
		if (i > $ds.getMaxRowIndex())
			termino = 1
		
		var $texto		 	= 'S A L D O   A N T E R I O R'
		var $cta_id			= $ds.getValue(i-1,11)
		var $cta_imp		= $ds.getValue(i-1,13)
		var $saldo_aux 		= globals.gcalcular_saldo($cta_id,null,null,0,0,globals.gMesDesde-1,globals.gAnioDesde,0,0,fMoneda)
		var $reg = new Array($c_ant,null,null,$texto,null,null,null,'A',0,0,$cta_id,$fecha_ant,$cta_imp,$saldo_aux)
		$ds.addRow(iPrimer,$reg)
		
		$texto 	= 'T O T A L'
	
		if ($scta_ant != $scta_act || (termino == 1 && $scta_act != '0000'))
		{
			var $total_debe 	= $scta_debe
			var $total_haber 	= $scta_haber
		}
		else
		{
			var $total_debe 	= $cta_debe
			var $total_haber 	= $cta_haber
		}
		$reg 	= new Array($c_ant,null,null,$texto,null,$total_debe,$total_haber,'T',0,0,$cta_id,$fecha_post,$cta_imp,null)
		$ds.addRow(i+1,$reg)
		
		$texto = 'S A L D O   A C T U A L'
		var $saldo_actual 	= $saldo_aux.toFixed(2)*1 + $total_debe.toFixed(2)*1 - $total_haber.toFixed(2)*1
		$reg 				= new Array($c_ant,null,null,$texto,null,null,null,'U',0,0,$cta_id,$fecha_post,$cta_imp,$saldo_actual)
		$ds.addRow(i+2,$reg)
		if (termino == 0)
			i += 3
			
		if ($scta_ant != '0000' && ($cta_ant != $cta_act || termino == 1))
		{
			$texto		 	= 'S A L D O   A N T E R I O R'
			$cta_id			= buscarIdCuenta($cta_ant+'0000')
			$saldo_aux 		= globals.gcalcular_saldo($cta_id,null,null,0,0,globals.gMesDesde-1,globals.gAnioDesde,0,0,fMoneda)
			var $cuenta		= buscarDescrCuenta($cta_id)
			$reg = new Array($cta_ant+'0000',null,null,$texto,null,null,null,'A',0,0,$cta_id,$fecha_ant,$cuenta,$saldo_aux)
			$ds.addRow(i,$reg)
			
			$texto 	= 'T O T A L'
			$reg 	= new Array($cta_ant+'0000',null,null,$texto,null,$cta_debe,$cta_haber,'T',0,0,$cta_id,$fecha_post,$cuenta,null)
			$ds.addRow(i+1,$reg)
			
			$texto = 'S A L D O   A C T U A L'
			$saldo_actual 	= $saldo_aux.toFixed(2)*1 + $cta_debe.toFixed(2)*1 - $cta_haber.toFixed(2)*1
			$reg = new Array($cta_ant+'0000',null,null,$texto,null,null,null,'U',0,0,$cta_id,$fecha_post,$cuenta,$saldo_actual)
			$ds.addRow(i+2,$reg)
			
			$cta_debe 	= 0//$ds.getValue(i,6) 
			$cta_haber 	= 0//$ds.getValue(i,7)
			if (termino == 1)
				i = $ds.getMaxRowIndex() + 1
			else
				i += 3
		}
		if ($cta_ant != $cta_act)
		{
			$cta_debe 	= 0
			$cta_haber 	= 0
		}
		iPrimer = i
		$cta = $ds.getValue(i,1)
		if ($cta != null)
		{
			$scta_debe 	= 0//$ds.getValue(i,6) 
			$scta_haber = 0//$ds.getValue(i,7)
						
			if (i <= $ds.getMaxRowIndex())
			{
				$c_ant		= $ds.getValue(i,1)
				$cta_ant	= $cta.substr(0,7)
				$scta_ant	= $cta.substr(7,4)
			}
		}
	}
	//var tipos = new Array(JSColumn.TEXT,JSColumn.INTEGER,JSColumn.INTEGER,JSColumn.TEXT,JSColumn.INTEGER,JSColumn.NUMBER,JSColumn.NUMBER,JSColumn.TEXT,JSColumn.NUMBER,JSColumn.NUMBER,JSColumn.INTEGER,JSColumn.DATETIME,JSColumn.NUMBER)
	
	return $ds//.createDataSource('mayor',tipos)
}

/**
 * @properties={typeid:24,uuid:"27D6A340-FE1B-4A7C-85B8-29217D70AC8C"}
 */
function buscarIdCuenta(pcuenta)
{
	var query = 'select cuenta_id from cuentas where cuenta_busca = ? and empresa = ?'
	var args = new Array(pcuenta,globals.gUservID)
	var ds = databaseManager.getDataSetByQuery('contable',query,args,1)
	return ds.getValue(1,1)
}

/**
 * @param {Number} cta_id
 *
 * @properties={typeid:24,uuid:"45F93B69-1929-449A-9F3A-A0D56CA33E1A"}
 */
function buscarDescrCuenta(cta_id)
{
	var query = 'select cuenta_impresion from cuentas where cuenta_id = ? and empresa = ?'
	var args = new Array(cta_id,globals.gUservID)
	var ds = databaseManager.getDataSetByQuery('contable',query,args,1)
	return ds.getValue(1,1)
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"836B8D17-4BB6-427E-90E3-6224C3212917"}
 */
function onAction_divimp(event) {
	fDivision = null
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"2BCAAB24-D545-443E-A0F7-52F3812E5B74"}
 */
function onAction_cenimp(event) {
	fCentro = null
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"4FFD4E2E-A0C2-4D62-9D34-76A66E97A469"}
 */
function excel(event) {
	try{
		crearMayor('xls')
	}
	catch (e){
		globals.DIALOGS.showWarningDialog("Aviso",'Ocurrio un error: '+e,'OK')
	}
}

/**
 * Handle changed data.
 *
 * @param {String} oldValue old value
 * @param {String} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"78874A3E-85BF-4557-92FC-9C4D1C73538B"}
 */
function onDataChangeFechaDesde(oldValue, newValue, event) {
	globals.gMesDesde 	= newValue.substring(0,newValue.indexOf('|'))
	globals.gAnioDesde	= newValue.substring(newValue.indexOf('|')+1,newValue.length)
	return true
}

/**
 * Handle changed data.
 *
 * @param {String} oldValue old value
 * @param {String} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"AC001F76-876A-46E8-AE61-65F15B73FE1B"}
 */
function onDataChangeFechaHasta(oldValue, newValue, event) {
	globals.gMesHasta	= newValue.substring(0,newValue.indexOf('|'))
	globals.gAnioHasta	= newValue.substring(newValue.indexOf('|')+1,newValue.length)
	return true
}
